/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.Rol;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 *
 */
public class RolPeer {

	private static final String BUSCAR_RELES =
		"SELECT id_rol, descripcion FROM rol";

	private static final String BUSCAR_ROL  =	
		"SELECT id_rol, descripcion FROM rol "+
		"WHERE id_rol = &id_rol";

	private static final String INSERTAR_ROL  =
		"INSERT INTO rol( descripcion) VALUES "+
		"('&descripcion')";

	private static final String ACTUALIZAR_ROL =
		"UPDATE rol "+
		"SET  descripcion = '&descripcion' "+
		"WHERE id_rol = &id_rol";

	private static final String ELIMINAR_ROL =
		"DELETE FROM rol "+
		"WHERE id_rol = &id_rol";

	
	
	
	/** busca en la base de datos todos los registros de la tabla "rol"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de roles
	* @see         				Rol, Statement
	*/
	public static ArrayList<Rol> buscartodosRol(Statement stmt) {
		ArrayList<Rol> roles = new ArrayList<Rol>();

		String sql = BUSCAR_RELES; //"SELECT id_rol, descripcion FROM rol";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Rol rol = new Rol();

					rol.setIdRol(rs.getInt("id_rol"));
					rol.setDescripcion(rs.getString("descripcion")); 
					
					roles.add(rol);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return roles;
	}
	
	/** busca en la base de datos un registro de la tabla "rol"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* @param idRol		    id de la rol que se desea cosultar
	* 
	* @return					rol buscada
	* @see         				Rol, Statement
	*/
	public static Rol buscarRol(Statement stmt, int idRol) {
		Rol rol = new Rol();

		String sql = BUSCAR_ROL;
		//"SELECT id_rol, descripcion FROM rol "+
		//"WHERE id_rol = &id_rol";
		
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_rol", String.valueOf(idRol));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					rol.setIdRol(rs.getInt("id_rol"));
					rol.setDescripcion(rs.getString("descripcion"));
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}

		return rol;
	}
	
	/** Inserta una Rol en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param rol		rol que se va a insertar en la base de datos
	 *  
	 * @return					void
	 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	
	
	public static int insertarRol(Statement stmt, Rol rol) throws SQLException {
		int idNuevaRol = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_ROL;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&descripcion", rol.getDescripcion());
					 
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaRol = rs.getInt("&id_rol");
				Util.print("nuevo registro: " + idNuevaRol);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaRol;
	}
	

	/** Actualiza una rol en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param rol			rol que se va a actualizar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static void actualizarRol(Statement stmt, Rol rol) throws SQLException {
		String sql = ACTUALIZAR_ROL;
		 //se setean los "parametros": &id_rol, &descripcion
		sql = sql.replaceAll("&id_rol", "" + rol.getIdRol())
				 .replaceAll("&descripcion", rol.getDescripcion());
		stmt.executeUpdate(sql);
	}
	
	/** Elimina un rol en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param rol				rol que se va a eliminar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	public static void eliminarRol(Statement stmt, Rol rol) throws SQLException {
		String sql = ELIMINAR_ROL;
		// se setean los "id_rol = &id_rol";
		sql = sql.replaceAll("&id_rol", "" + rol.getIdRol());

		stmt.executeUpdate(sql);
	}
	
}
